home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (PO)
/
Nibble Volume 11, No. 11 (1990-11)(MindCraft Publishing)(Side A)[a].zip
/
Nibble Volume 11, No. 11 (1990-11)(MindCraft Publishing)(Side A)[a].po
/
APPLEMATE.S
< prev
next >
Wrap
Text File
|
1996-12-24
|
4KB
|
147 lines
************************
* AppleMate *
* *
* The Complete *
* Keyboard Macro *
* System *
* *
* Copyright 1990 by *
* MindCraft, Inc. *
* *
* Merlin Assembler *
************************
ORG $4000
PTR = $06
ADDR_HI = $07
MACRONUM = $08
AREG = $45
BUFFPOS = $46
CHRGET = $B1
CHRGOT = $B7
TXTPTR = $B8
DATA = $D995
BUFFER = $200
OLDKSWL = $BE32
BUTTON = $C061
COUT = $FDED
RESTORE = $FF3F
SAVE = $FF4A
CLD
LDA TXTPTR ;Save TXTPTR in case "&" cmd
STA PTR ;isn't ours.
LDA TXTPTR+1
STA PTR+1
JSR CHRGOT 'Was &"MAC" entered?
AND #$DF
CMP #'M'
BNE NOT_OURS
JSR CHRGET
AND #$DF
CMP #'A'
BNE NOT_OURS
JSR CHRGET
AND #$DF
CMP #'C'
BEQ OUR_CMD
NOT_OURS LDA PTR ;If not, restore pointers
STA TXTPTR
LDA PTR+1
STA TXTPTR+1
JSR CHRGOT ;re-get first char, and
JMP $FFFF ;JMP to address set by
;Applesoft installer.
OUR_CMD
LDA #$00 ;Hi byte of BEGIN POKEd here
STA PTR+1 ;by Applesoft installer.
LDA OLDKSWL ;Applemate already there?
CMP #<BEGIN
BNE INSTALL
JMP DATA ;Exit to Applesoft if so
INSTALL LDA #<BEGIN ;Set low byte; high byte set
STA PTR ;above.
LDY #1
LDA OLDKSWL ;Save location of original
STA (PTR),Y ;KSWL so as to be able to
INY ;be able to JSR to it.
LDA OLDKSWL+1
STA (PTR),Y
LDA #<BEGIN ;Install new input routine
STA OLDKSWL ;into keyboard input vectors.
LDA ADDR_HI ;(High byte of 'BEGIN')
STA OLDKSWL+1
CLC
ADC #1 ;Add 1 for hi byte of table
LDY #TBL_ADDR+1-BEGIN ;Poke addr of macro
STA (PTR),Y ;table into code.
NOP ;Leave room for DOS 3.3
NOP ;patch (JSR $03EA).
NOP
JMP DATA ;Installation done; exit
BEGIN JSR $FFFF ;First JSR to original KSWL
JSR SAVE ;Save registers in zero page
LDY #$00 ;Set offset byte to zero
LDX BUTTON ;Open-apple being pressed?
BMI CHECKKEY
LDX BUTTON+1 ;Closed-apple?
BPL RETURN ;If neither, exit
LDY #$0A ;Set offset for closed-apple
CHECKKEY STY MACRONUM ;Save offset
LDA AREG ;Is the keypress valid?
SEC
SBC #$B0 ;Is keypress less than "0"?
BMI RETURN
CMP #$0A ;greater than "9"?
BCS RETURN
ADC MACRONUM ;Add in offset byte
STA MACRONUM ;Number of macro wanted
LDY #$00 ;Zero in Y used below
STY PTR ;Low byte = 0
TBL_ADDR LDA #$00 ;Set by INSTALL routine
STA PTR+1 ;Macro table $100 above
;AppleMate code.
SCAN1 ;Find the macro wanted
DEC MACRONUM ;If DEC'd around to $FF,
BMI READMAC2 ;it's our macro; go do it.
SCAN2 LDA (PTR),Y ;Scan for end of this macro
PHP ;Save N flag
INC PTR ;Increment location of macro
BNE SCAN3
INC PTR+1
SCAN3 PLP ;Get back N flag; macro end?
BPL SCAN2 ;If not, then keep scanning
BMI SCAN1 ;If yes, decrement number
READMAC1 INY ;Start storing macro in the
READMAC2 LDA (PTR),Y ;keyboard buffer.
BMI ENDUP ;Is it last char of macro?
LDX BUFFPOS ;No; go ahead and poke char
ORA #$80
STA BUFFER,X
JSR COUT ;Print char to screen
INX ;Increment buffer pointer
STX BUFFPOS
CPX #$F0 ;Is it end of buffer?
BCC READMAC1 ;If not then continue
LDA #$98 ;If yes then control-X
ENDUP STA AREG ;End with pseudo key-press
RETURN JMP RESTORE ;All done; return control